#ifndef _TARGET_FINDER_H_
#define _TARGET_FINDER_H_

#include "master_process.h"

#define TARGET_DIS_INITIAL_VALUE 50.0f // 自瞄迭代距离变量的初值
#define TARGET_DEAD_ANGLE 1.0f // 查找死区



// 目标查找计算用数据
typedef struct
{
    float distance_range_max;
    float distance_range_min;
    float angle_range_max;  // 目标的查找范围,随函数调用逐步缩小
    float angle_range_min;

    float find_out_layer;   // 瞄准的迭代层数，越高精度越高但会更耗时
    float find_out_step;    // 每次迭代的距离

    uint8_t find_direct;   // 查找方向 0逆时针,1顺时针
    uint8_t find_start_flag; // 是否处于查找递推
}Target_Data_s;

// 飞镖架瞄准实例
typedef struct
{
    float target_distance;  // 目标距离
    float target_angle;     // 目标yaw角度

    float active_angle; // 给yaw执行机构发送的目标位置

    Target_Data_s target_data; // 瞄准目标运算用数据
    Target_Type_e target_type; // 瞄准目标类型
    Target_State_e target_state; // 目标瞄准状态
}TargetInstance;

// 飞镖架瞄准位置设置
typedef struct
{
    Target_Data_s target_data; // 瞄准目标运算用数据
    Target_Type_e target_type; // 瞄准目标类型
}Target_Init_Config_s;


/**
 * @brief 初始化目标查找器
 * 
 * @param config 目标查找器初始化配置
 * @return TargetInstance* 目标查找器实例指针
 */
TargetInstance *TargetInit(Target_Init_Config_s config);

/**
 * @description: 目标查找器迭代算法运行函数
 * @param {TargetInstance} target
 * @param {float} offset_angle
 * @param {float} laser_distance
 */
void TargetFindOut(TargetInstance *target, float offset_angle, float laser_distance);

#endif // !_TARGET_FINDER_H_
